<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>this的默认绑定</title>
</head>

<body>

</body>
<script>
  // this 默认指向了 window
  // 1、全局环境下的this指向了window
  console.log(this);

  // 2、函数独立调用，函数内部的this也指向了window
  function fn() {
    console.log(this);
  }
  fn();

  // 3、被嵌套的函数独立调用时，this默认指向了window
  var a = 0;
  var obj = {
    a: 2,
    foo: function () {
      // 函数当作对象的方法调用时，this指向了obj
      var that = this;  // obj
      function test() {
        console.log(that.a); // window
      }
      test();
    }
  }
  obj.foo();

  // 4、IIFE 自执行函数中内部的this指向了window
  var a = 10;
  function foo() {
    console.log(this);
    (function test(that) {
      console.log(that.a);
    })(this)
  }
  var obj = {
    a: 2,
    foo: foo
  }
  obj.foo();

  (
    function () {
      console.log(this);  //window
    }
  )()

  // 5、闭包中的this默认指向了window
  var a = 0;

  var obj = {
    a: 2,
    foo: function () {
      var c = this.a;
      return function test() {
        console.log(this);  //window
        return c;
      }
    }
  }

  var fn = obj.foo();
  fn();







</script>

</html>